#include <iostream>
using namespace std;

/*
    函数重载注意实参类型的兼容
    类型之间存在兼容关系，不一定要完全一致

    参数类型的兼容性
            参数是double类型，可以往下兼容float , int, long,short
            参数是float类型，可以往下兼容int, long,short
            long，short，int相互之间可以兼容(不区分精度)
            long,int,short和float之间可以互相兼容
            long,int,short和double之间可以互相兼容
       如果实参类型跟你定义函数形参类型完全匹配(一模一样)--》此时不必理会兼容性
       如果实参类型跟你定义函数形参类型不完全匹配(有差别)--》此时按照兼容性来处理，如果有多个版本可以兼容，编译器提示有歧义（二义性）

*/

double add(double a, double b)
{
    return a + b;
}

int main()
{
    cout << add(1, 2) << endl;
    // 最优解 add(int, int)
    // 次优解 add(double, int)
    // 次优解 add(int, double)
    // 最差解 add(double, double)

    // -------------------------------
    cout << add(1.1, 2.2) << endl;
    cout << add(1.1, 2) << endl;
    cout << add(1, 2.2) << endl;
    return 0;
}